iT邦幫忙

1

[ 猩猩也會用 ] Git 介紹筆記

  • 分享至 

  • xImage
  •  

Github 相關在之前的文章有介紹過了,可以參考[ 猩猩也會用 ] Github 使用筆記
這篇會單純著重在Git 指令上進行介紹
如果你只是忘記指令,可以從第三章開始看就好瞜。

1. 版本控制簡介

版本控制是一種系統,用於追蹤和管理檔案或專案隨時間變化的過程。它允許多人協作開發,並保留專案的完整歷史記錄。

主要功能:

  • 追踪檔案的變更
  • 記錄誰在何時做了什麼修改((很重要
  • 恢復到之前的版本
  • 比較不同版本之間的差異
  • 支持多人同時工作於同一專案

版本控制系統類型:

  1. 本地版本控制系統: 在本機電腦上管理檔案版本
    • 在單一電腦上管理文件版本。
    • 例如:RCS(Revision Control System)。
    • 優點:簡單。
    • 缺點:無法協作,存在數據丟失風險。
  2. 集中式版本控制系統: 如SVN,使用中央伺服器存儲所有版本
    • 使用中央服務器存儲所有版本的文件。
    • 例如:SVN(Subversion)。
    • 優點:支持多人協作。
    • 缺點:依賴中央服務器,離線工作受限。
  3. 分散式版本控制系統: 如Git,每個開發者都有完整的版本歷史
    • 每個用戶都有完整的版本歷史副本。
    • 例如:Git,Mercurial。
    • 優點:不依賴中央服務器,支持離線工作,更靈活的分支管理。
    • 缺點:學習曲線可能較陡。

2. Git

Git誕生於2005年,其創建與Linux核心開發社群密切相關。在Git出現之前,Linux核心社群使用的是BitKeeper這個專有的分散式版本控制系統。
Git這個名字是Torvalds(創始人)自己選的,在英國俚語中意為"討厭的人"。Torvalds說他是以自嘲的方式為它命名的。
Git的這些特點使它成為當今最流行的版本控制系統之一,不僅適用於小型項目,也能夠有效管理大型、複雜的項目。它的設計理念和功能特性極大地改變了軟件開發的協作方式。

  • 創始人:Linus Torvalds(Linux核心的創始人)
  • 創建時間:2005年4月
  • 創建原因
    1. BitKeeper收回了對Linux社群的免費使用權。
    2. 現有的版本控制系統(如CVS, SVN)無法滿足Linux核心開發的需求。
    3. Torvalds希望有一個快速、可靠且完全分散式的系統。

2.1版本控制的基本概念

  • Repository (倉庫): 存儲專案所有文件和歷史記錄的地方,就是放專案的倉庫
  • Commit (提交): 保存文件變更的動作,再本地存檔
  • Branch (分支): 獨立的開發線
  • Merge (合併): 將不同分支的變更整合在一起
  • Conflict (衝突): 當合併時出現不一致的變更
  • Clone (克隆): 複製一個遠端倉庫到本地
  • Push (推送): 將本地變更上傳到遠端倉庫
  • Pull (拉取): 從遠端倉庫獲取並合併變更

2.2安裝和設置Git

2.2.1 Windows

2.2.1.1 Git官方網站:Git
2.2.1.2 下載Windows版本的安裝檔。
2.2.1.3. 安裝程式,按照指示進行安裝。

  • 一般使用者建議保留預設選項。
  • 選擇是否將Git添加到PATH環境變量(建議添加)。

2.2.1.4. 完成安裝後,打開命令提示或Git Bash來驗證安裝:
git --version
2.2.1.5. 設定識別資料

$ git config --global user.name "John Doe" 
$ git config --global user.email johndoe@example.com 

可以輸入,來確認是否更改成功

git config --global user.name
git config --global user.email

2.2.1.6. 設定編輯器
git config --global core.editor "'C:/Program Files (x86)/Notepad++/notepad++.exe' -multiInst -nosession" (可以選擇自己習慣的編輯器)
2.2.1.7. 檢視自己的設定
git config --list

2.2.2Linux(Ubuntu/Debian)

2.2.2.1. 直接使用apt指令安裝
sudo apt update
sudo apt install git
2.2.2.2. 驗證安裝:
git --version
2.2.2.3. 其餘同 windows 的 2.2.1.5~7

git 初次設定詳細可以參考Git官網

好現在你就可以開始git的功能了! :)

3. Git基本操作

3.1創建和Clone Repository

會有兩種方法取得repostory
1. 將現有的專案或者資料夾匯入 Git
2. 從其它伺服器(如github), clone / 下載一份現有的 Git repository

3.1.1 在現有資料夾中初始化Repository

3.1.1.1 將資料夾,進行git初始化,這個命令將會建立一個名為 .git 的子資料夾,其中包含 Git 所有必需的Repository檔案,預設沒有追蹤任何檔案
git init

3.1.2 從其它伺服器(如github)clone/download

3.1.2.1 clone
git clone <repository_url>

3.2 添加和提交更改

3.2.1 查看哪些文件被修改
git status

3.2.2 添加特定文件到暫存區
git add <filename>
3.2.3 添加所有更改的文件
git add .

3.2.4 提交暫存區中的更改
git commit -m "提交信息"
如果想要更詳細的提交信息,可以省略 -m 參數,這會打開一個文本(2.2.1.6 設定的)編輯器讓您輸入多行提交信息。

3.2.5 如果需要修改最後一次提交
git commit --amend

3.3 查看歷史記錄

3.3.1 查看提交歷史

查看提交歷史:
git log
Copy查看簡化的歷史記錄:
git log --oneline

3.3.2 查看特定提交

查看特定提交的詳細信息:
git show <commit_hash>

3.4 分支管理

3.4.1 列出分支

列出本地分支:
git branch
列出所有分支(包括遠端分支):
git branch -a

3.4.2 創建新分支

創建新分支:
git branch <branch_name>

3.4.3 切換分支

切換到指定分支:
git checkout <branch_name>
創建並切換到新分支:
git checkout -b <new_branch_name>

3.4.4 刪除分支

刪除已合併的分支:
git branch -d <branch_name>
強制刪除未合併的分支:
git branch -D <branch_name>

3.5 合併和解決衝突

3.5.1 合併分支

將指定分支合併到當前分支:
git merge <branch_name>

3.5.2 解決Conflict

當合併產生衝突時,Git會在文件中標記衝突區域。您需要手動編輯這些文件來解決衝突,然後:
git add <conflicted_file>
git commit

3.6 Remote操作

3.6.1 添加Remote Repository

git remote add <remote_name> <repository_url>

3.6.2 查看遠端倉庫

git remote -v

3.6.3 從遠端獲取更新

獲取遠端更新但不合併:
git fetch <remote_name>

3.6.4 拉取遠端更新

獲取遠端更新並合併到當前分支:
git pull <remote_name> <branch_name>

3.6.5 推送到遠端

將本地分支推送到遠端:
git push <remote_name> <branch_name>

3.7 撤銷更改

3.7.1 撤銷工作區的修改

git checkout -- <file>

3.7.2 撤銷暫存區的修改

git reset HEAD <file>

3.7.3 撤銷提交

創建一個新的提交來撤銷之前的提交:
git revert <commit_hash>

好了,休息一下,這邊你已經可以使用基本Git,進行專案上的管控了。:)

4. Git進階技巧

4.1 重置和回滾

重置(reset)和回滾(revert)是兩種不同的撤銷變更的方法,各有其適用場景。

4.1.1 Git Reset

git reset 命令可以將 HEAD 指針移動到指定的提交,有三種模式:

  1. Soft Reset
    git reset --soft <commit_hash>
  • 移動 HEAD 指針
  • 不改變暫存區和工作目錄
  • 用途:重新組織最近的幾次提交
  1. Mixed Reset (默認模式)
    git reset <commit_hash>

    git reset --mixed <commit_hash>
  • 移動 HEAD 指針
  • 重置暫存區
  • 不改變工作目錄
  • 用途:撤銷 git add 和 git commit
  1. Hard Reset
    git reset --hard <commit_hash>
  • 移動 HEAD 指針
  • 重置暫存區和工作目錄
  • 用途:完全放棄最近的提交

4.1.2 Git Revert

git revert 創建一個新的提交來撤銷之前的變更:
git revert <commit_hash>

  • 不改變歷史記錄,而是添加一個新的提交
  • 適用於已推送到遠程倉庫的提交
  • 對於多人協作專案更安全

4.2 使用標籤

標籤用於標記程式碼庫中的重要點,如發布版本。

4.2.1 創建標籤

  1. 輕量標籤:
    git tag <tag_name>

  2. 附註標籤(推薦):
    git tag -a <tag_name> -m "標籤說明"

4.2.2 列出標籤

git tag

4.2.3 查看標籤信息

git show <tag_name>

4.2.4 推送標籤到Remote

git push origin <tag_name>
推送所有標籤:
git push origin --tags

4.2.5 刪除標籤

刪除本地標籤:
git tag -d <tag_name>
刪除遠程標籤:
git push origin --delete <tag_name>

4.3 Cherry-pick

Cherry-pick 允許您選擇性地將特定提交應用到當前分支。

4.3.1 基本用法

git cherry-pick <commit_hash>

4.3.2 Cherry-pick 多個提交

git cherry-pick <commit_hash_1> <commit_hash_2>

4.3.3 不自動提交

git cherry-pick -n <commit_hash>
這會將變更應用到工作目錄和暫存區,但不自動創建新的提交。

4.3.4 解決衝突

如果 cherry-pick 過程中發生衝突:

  1. 解決衝突
  2. git add 已解決的文件
  3. git cherry-pick --continue

或者放棄 cherry-pick:
git cherry-pick --abort

4.4 Rebase

Rebase 用於改變一系列提交的基礎,可以用來整理提交歷史。

4.4.1 基本用法

git rebase <base_branch>

4.4.2 交互式 Rebase

git rebase -i <base_commit>
這會打開一個編輯器,允許您重新排序、編輯、壓縮或刪除提交。

4.4.3 常見的 Rebase 操作

  • pick:使用該提交
  • reword:修改提交信息
  • edit:修改該提交
  • squash:將提交合併到前一個提交
  • fixup:類似squash,但丟棄提交信息
  • drop:刪除該提交

4.4.4 解決 Rebase 衝突

如果 rebase 過程中發生衝突:

  1. 解決衝突
  2. git add 已解決的文件
  3. git rebase --continue

或者放棄 rebase:
git rebase --abort

4.4.5 注意事項

  • 不要對已推送到公共倉庫的提交進行 rebase
  • Rebase 可能會改變提交hash,使用時要小心

5. Git和GitHub協作最佳實踐

  • 分支策略
  • Commit訊息規範
  • Code Review流程

5.1 分支策略

分支策略是有效管理程式碼庫和協作流程的關鍵。

5.1.1 Git Flow

適合有計劃發布的大型項目。

  • main(或master): 穩定的生產程式碼
  • develop: 開發分支
  • feature/*: 新功能開發
  • release/*: 版本發布準備
  • hotfix/*: 生產環境緊急修復

5.1.2 GitHub Flow

適合持續部署的項目。

  • main: 始終保持可部署狀態
  • 功能分支:直接從main創建

5.1.3 最佳實踐

  • 使用描述性的分支名稱
  • 經常與主分支同步
  • 及時刪除已合併的分支

5.2 Commit訊息規範

良好的提交信息提高程式碼可讀性和可維護性。

5.2.1 基本結構

5.2.2 常用前綴(type)

  • feat: 新功能
  • fix: 錯誤修復
  • docs: 文檔更改
  • style: 格式調整(不影響程式碼運行的變動)
  • refactor: 程式碼重構(既不是新增功能,也不是修改bug的程式碼變動)
  • perf: 改善性能的程式碼更改
  • test: 添加測試或修正現有測試
  • chore: 構建過程或輔助工具的變動

5.2.3 最佳實踐

  • 使用現在時態("Add feature"而不是"Added feature")
  • 主題行不超過50個字符
  • 主題行首字母大寫
  • 主題行結尾不加句號
  • 正文每行不超過72個字符
  • 使用正文解釋"是什麼"和"為什麼",而不是"如何"

例子:

feat(auth): implement user authentication

Add login and registration endpoints
Implement JWT token generation and validation
Set up password hashing with bcrypt

Closes #123

5.3 Code Review流程

程式碼審查是提高程式碼質量和知識共享的關鍵實踐。

5.3.1 提交Pull Request (PR)的最佳實踐

  • 保持PR的規模適中,便於審查
  • 提供清晰的描述,說明改動的目的和影響
  • 如果適用,包含測試計劃或結果
  • 在提交PR之前自我審查程式碼

5.3.2 審查者的最佳實踐

  • 及時審查,不要讓PR長時間等待
  • 先了解整體目的,再關注細節
  • 提供建設性的反饋,解釋原因
  • 區分必要的更改和可選的建議
  • 讚賞好的實踐和巧妙的解決方案

5.3.3 程式碼審查清單

  • 程式碼是否遵循項目的編碼規範?
  • 邏輯是否正確?
  • 是否有潛在的性能問題?
  • 錯誤處理是否充分?
  • 是否有適當的測試覆蓋?
  • 文檔是否更新?
  • 程式碼是否簡潔易懂?

5.3.4 處理反饋

  • 對每條評論給予回應
  • 如果不同意,禮貌地解釋原因
  • 及時進行必要的修改
  • 重大更改後請求重新審查

5.3.5 合併準則

  • 所有審查意見都已解決
  • CI/CD檢查通過
  • 獲得指定數量的批准
  • 符合項目的合併策略(如壓縮提交、rebase等)

5.4 其他最佳實踐

5.4.1 持續集成(CI)

  • 為每個PR運行自動化測試
  • 使用GitHub Actions或其他CI工具
  • 快速發現並修復集成問題

5.4.2 文檔

  • 保持README.md更新
  • 使用Wiki記錄詳細信息
  • 為API和關鍵功能提供文檔

5.4.3 問題追踪

  • 使用Issues記錄任務、錯誤和功能請求
  • 使用標籤組織Issues
  • 將PR與相關Issues關聯

5.4.4 安全性

  • 不在程式碼中存儲敏感信息
  • 使用GitHub的安全功能(如依賴項掃描)
  • 定期更新依賴項

6. Git和GitHub的工具和集成

  • GUI客戶端
  • IDE集成
  • CI/CD集成

6.1 命令行工具

Git主要通過命令行界面操作,常用的命令行工具包括:

  • Git Bash (Windows): 提供Unix風格的命令行環境
  • Terminal (macOS/Linux): 系統內建的終端機
    主要命令 :
git init  # 初始化倉庫
git clone  # 克隆倉庫
git add  # 添加文件到暫存區
git commit  # 提交更改
git push  # 推送到遠程倉庫
git pull  # 從遠程倉庫拉取更新

6.2 圖形化界面工具

對於不習慣命令行的用戶,有多種圖形化界面(GUI)工具可供選擇:

  • GitHub Desktop: GitHub官方客戶端,簡單易用,而且免費,免費治百病
  • GitKraken: 功能豐富,支持Windows/Mac/Linux,功能強大,但要收費
  • SourceTree: Atlassian開發,免費且功能強大
  • TortoiseGit: Windows系統下的Git客戶端

6.3 IDE集成

許多現代集成開發環境(IDE)都內建Git支持:

  • Visual Studio Code: 輕量級編輯器,Git集成度高
  • IntelliJ IDEA: Java開發首選,Git功能完善
  • Eclipse: 通過插件支持Git操作
  • PyCharm: Python開發環境,內建Git支持

IDE集成使開發者可以在編碼的同時進行版本控制操作。

6.4 GitHub相關工具

GitHub提供了多種工具來增強協作和開發流程:

  • GitHub Actions: 自動化工作流程工具
  • GitHub Pages: 靜態網站托管服務
  • GitHub Codespaces: 雲端開發環境
  • GitHub CLI: 命令行界面的GitHub操作工具

6.5 第三方集成服務

許多第三方服務可以與GitHub集成,提高開發效率:

  • Travis CI / CircleCI: 持續集成和持續部署(CI/CD)服務
  • Codecov: 程式碼覆蓋率分析工具
  • Dependabot: 自動更新依賴項
  • Slack: 團隊協作和通知集成

6.6 Git擴展工具

一些擴展工具可以增強Git的功能:

  • Git LFS (Large File Storage): 用於版本控制大文件
  • Git Submodules: 管理多個相關但獨立的項目
  • Git Hooks: 自動化Git操作前後的腳本

這些工具和集成使Git和GitHub更加強大和靈活,能夠適應不同的開發需求和工作流程。

7. 安全性和權限管理

Git 和 GitHub 提供了多種機制來確保程式碼的安全性和適當的訪問控制。以下是兩個關鍵方面:

7.1 設置SSH密鑰

SSH(Secure Shell)密鑰提供了一種安全的方式來驗證你的身份,無需每次都輸入用戶名和密碼。

  1. 生成 SSH 密鑰:
    ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

  2. 查看公鑰:
    cat ~/.ssh/id_rsa.pub

  3. 將公鑰添加到 GitHub 賬戶:

  • 登錄 GitHub
  • 進入 Settings > SSH and GPG keys
  • 點擊 "New SSH key"
  • 貼上你的公鑰並保存
  1. 測試連接:
    ssh -T git@github.com

使用 SSH 密鑰可以增強安全性,並簡化了與遠程倉庫的交互過程。

7.2 管理倉庫訪問權限

GitHub 提供了細粒度的訪問控制,可以管理誰可以訪問你的倉庫以及他們可以執行什麼操作。

  1. 倉庫可見性:
  • Public:所有人可見
  • Private:只有被邀請的人可見
  • Internal:僅組織成員可見(僅適用於企業賬戶)
  1. 協作者和團隊:
  • 可以邀請個人協作者
  • 可以創建團隊並分配權限
  1. 分支保護規則:
  • 要求 pull request 審核才能合併
  • 限制誰可以推送到特定分支
  • 強制狀態檢查通過才能合併
  1. 權限級別:
  • Read:可以克隆和拉取
  • Triage:可以管理 issues 和 pull requests
  • Write:可以推送和合併 pull requests
  • Maintain:可以管理倉庫而不能刪除
  • Admin:完全控制權限
  1. 雙因素認證(2FA):
  • 強烈建議啟用 2FA 以增加賬戶安全性

8. 資源和參考

8.1 官方文檔

官方文檔是最權威和最新的資訊來源:

  1. Git 官方文檔

    • 網址:https://git-scm.com/doc
    • 內容:完整的 Git 命令參考、使用指南和概念解釋
    • 特點:詳盡、準確,但可能對初學者來說較為複雜
  2. GitHub 官方文檔

    • 網址:https://docs.github.com/
    • 內容:GitHub 特有功能的使用說明、最佳實踐和 API 文檔
    • 特點:涵蓋 GitHub 所有功能,持續更新
  3. GitHub Guides

    • 網址:https://guides.github.com/
    • 內容:一系列簡明的指南,涵蓋 GitHub 核心概念和工作流程
    • 特點:適合初學者,提供實用的入門知識

8.2 線上課程和教程

  1. Codecademy - Learn Git

  2. Udacity - Version Control with Git

  3. Oh Shit, Git!?!


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言